#ifndef	PIZZAFACTORY_HPP__
# define	PIZZAFACTORY_HPP__

#include	<map>

# include	"Margarita.hpp"
# include	"Regina.hpp"
# include	"Americaine.hpp"
# include	"Fantasia.hpp"

class PizzaFactory
{
public:
  typedef	Pizza *(PizzaFactory::*PizzaCreator)(TaillePizza);
  typedef	std::map<TypePizza, PizzaCreator>	PizzaFct;

public:
  PizzaFactory();
  ~PizzaFactory();

  Pizza		*create(TypePizza, TaillePizza);

private:
  Pizza		*createMargarita(TaillePizza);
  Pizza		*createRegina(TaillePizza);
  Pizza		*createAmericaine(TaillePizza);
  Pizza		*createFantasia(TaillePizza);

private:
  PizzaFct	_pizzaFct;

private:
  PizzaFactory(PizzaFactory const&);
  PizzaFactory	&operator=(PizzaFactory const&);
};

#endif	/* !PIZZAFACTORY_HPP__ */